🎙️阅读本文需要 7 分钟
本周二(11 月 5 日)我们分享了 StreamNative 的 Jennifer 和 Yu 在 COSCon 2019 中国开源年会上的演讲——Apache Pulsar:一个无国界的社区,讲述了如何将 Apache Pulsar 打造成受欢迎的社区。
同时,来自 StreamNative 的翟佳也在此会议上分享了「Apache Pulsar—从消息系统到流原生平台」,深入并系统地介绍了 Apache Pulsar 的架构和原理。
Apache Pulsar 是灵活的发布-订阅消息系统(Flexible Pub/Sub messaging),采用分层分片架构。
但其实存在的消息系统有很多,Yahoo 为什么研发自己的消息系统呢?已有的消息系统无法解决 Yahoo 遇到的问题和规模,Yahoo 需要多租户,能够支撑上百万的 topics,同时满足低延迟、持久化和跨地域复制要求。
>> 其他已有系统存在问题
>> 解决方法
Pulsar 的独特之处在于,在 partition 和 consumer 中间添加了订阅模型,订阅模型有 exclusive、failover、shared 模式。企业要维护大的集群,多租户特性显示得尤为重要。Pulsar 的多租户特性能满足企业的管理需求,可提供隔离、共享、和丰富策略来管理 topic。每个租户下面有 namespace,namespace 下又有一个或多个 topic。租户层通过角色控制实现消息的共享和隔离。namespace 层提供了丰富的策略,可对 topic 进行管理。例如,你可以在 namespace 中设置管理策略,如消息副本数、backlog 超过阈值后如何处理等等。
应用 namespace 管理,可应用 Pulsar 的跨地域复制,实现异地互备,在创建时添加一个参数指定一个 topic 在几个机房之间做互备即可。
Pulsar Geo-replication 的优点如下:
Broker 原生,方便易用
Pub-Sub 一体
管理简单
配置灵活
Pulsar 使用计算与存储分离的云原生架构,数据从 Broker 搬离,存在共享存储内部,上层是无状态 Broker,复制消息分发和服务,下层是持久化的存储层 Bookie 集群,而且 Pulsar 存储是分片的,这种构架可以避免扩容时受限制,实现数据的独立扩展和快速恢复。
Pulsar 给用户提供了 partition 的逻辑抽象,底层物理存储将逻辑的 partition 划分为多个分片,均匀存储在所有节点上。该结构的好处在于存储容量不再受限于单个存储节点容量,扩容无需进行数据搬移,数据分布均匀。
分层指存储和计算的分离。在 server 端,每个 broker 作为存储层的一个 client,将 topic 数据存储到底层存储层 bookie 中。该架构的特点和优势是:
Pulsar 使用 BookKeeper 作为存储层。BookKeeper 提供的是WAL(Write Ahead Log)的抽象。解决的问题是把受限于单个节点的 binlog 分散到集群中,并提供高带宽和低延迟。支持读和写的高可用,节点宕机后,新节点换入,不会影响用户应用。
无感知容错,零数据 Catch up,运维便捷。对存储层来说,分层分片架构和底层并发架构让数据恢复简单,应用无感知,且控制灵活。存储扩容方便。存储容量不再受限于单个存储节点容量,扩容无需数据搬移,数据分布均匀。
Kafka:前两个节点已经满了,新加节点需要数据搬移和平衡,不能立即用。
Pulsar:不同于 Kafka 物理和逻辑的绑定性,存储是平均分配的,每个 topic 分成小块,分布更均匀。加入新的节点后,可以立即使用。
下面这张图形象直观地看到 Pulsar 和 Kafka 的不同。
>> Segmented Stream
Pulsar 将无界的数据看作是分片的流,分片分散存储在分层存储(tiered storage)、BookKeeper 集群和 Broker 节点上,而对外提供一个统一的、无界数据的视图。其次,不需要用户显式迁移数据,减少存储成本并保持近似无限的存储。
>> 统⼀的数据存储层
Pulsar 做了队列模型和流模型的统一,在 Topic 级别只需保存一份数据,同一份数据可多次消费。以流式、队列等方式计算不同的订阅模型大大提升了灵活度。>> Schema Registry
数据是有结构的,结构也是在变化的。
⽣产者和消费者关于数据结构的⼀个“合同” 。
兼容性:向前、向后、全兼容、不兼容。
数据合法性的强制检查。
>> Pulsar Function
Pulsar Functions 是一个轻量级的计算框架,可以给用户提供一个部署简单、运维简单、API 简单的 FASS(Function as a service)平台。
Pulsar Functions 提供基于事件的服务,支持有状态与无状态的多语言计算,是对复杂的大数据处理框架的有力补充。
Pulsar IO 分为输入(Input)和输出(Output)两个模块,输入代表数据从哪里来,通过 Source 实现数据输入。输出代表数据要往哪里去,通过 Sink 实现数据输出。
>> Pulsar SQL
Pulsar 使用 Pulsar SQL 查询历史消息,使用 Presto 引擎高效查询 BookKeeper 中的数据。Presto 是用于大数据解决方案的高性能分布式 SQL 查询引擎,可以在单个查询中查询多个数据源的数据。如下是使用 Pulsar SQL 查询的示例。
Pulsar 在 Messaging 和 Stream Storge 的基础上,上层提供 Pulsar IO - Connector 接口。在 Messaging 层提供 Pulsar Functions。
在 Stream storage 层主要做二级存储,且提供用户直接访问接口,提供 Pulsar SQL、Hive 的集成。
在接下来的案例分享环节,翟佳主要对雅虎日本、智联招聘和腾讯这三家公司的应用实例来进行了讲解。>> 雅虎日本
雅虎日本是一家雅虎和软银合资的日本互联网公司,是日本最受欢迎的门户网站之一。多年来,雅虎日本使用 Apache Pulsar,关注 Pulsar 社区的新闻,更新和活动,在应用场景中使用 Pulsar 新功能,Pulsar 的稳定性一直很好。消息队列作为智联招聘非常重要的平台级服务负责全业务线的消息投递。智联计划打造一个可以解决当下痛点的产品来支撑智联招聘的业务,通过一段时间的技术选型工作后最终选择了Apache Pulsar作为搭建企业级事件中心的基础。腾讯计费(米大师)是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,汇集国内外主流支付渠道,提供账户管理、精准营销、安全风控、稽核分账、计费分析等多维度服务。Pulsar 的开源生态为开发者提供了广阔、灵活的开发空间,为了在腾讯计费场景中更好地应用 Pulsar,技术团队也对 Pulsar 做了一些功能优化。
Apache Pulsar:从消息系统到流原生平台同时,我们也将同一活动中, Jennifer 和 Yu 的演讲视频呈现给大家,让大家一次性将 Apache Pulsar 了解个透彻。
经历了 3 年的时间,Apache Pulsar 更新了 10 多个版本,社区线下活动已举行 10+ 场,遍布中国北上杭深和欧美等国家。
为了让脉冲波动继续延伸,我们将在 11 月去上海举行 2019 年最后一次线下活动分享。
11月16日!
Apache Pulsar 上海站!